package com.example.CollaborativeDiscussionLearning.mapper;

import com.example.CollaborativeDiscussionLearning.entity.ChatMsg;
import com.example.CollaborativeDiscussionLearning.entity.ChatRoom;
import com.example.CollaborativeDiscussionLearning.entity.ChatUser;
import com.example.CollaborativeDiscussionLearning.entity.UserRoom;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
* @Description: 聊天室的數據接口
* @Author: Junior
* @Date: 2023/6/12
*/
@Repository
public interface ChatRoomMapper {

    /**
    * 添加聊天室
    * @param chatRoom:  chatRoom
    */
    void  insertChatRoom(ChatRoom chatRoom);

    /**
    * 根据聊天室名字查询聊天室
    * @param roomName:  roomName
    * @return: com.example.junior.entity.ChatRoom
    */
    List<ChatRoom> queryChatRoom(String roomName);

    /**
     * 根据聊天室名字和课程id查询聊天室
     */
    ChatRoom queryChatRoomByRoomNameAndCourseId(String roomName, Integer courseId);

    /**
    * 插入用户ip和房间id对应表
    * @param userRoom:  roomId
    * @return: void
    */
    void insertUserRoom(UserRoom userRoom);

    /**
    * 根据用户code和房间号查询
    */
    UserRoom queryUserRoom(String code, Integer roomId);

    /**
    * 通过用户code查询所有聊天室
    */
    List<UserRoom> queryUserRoomByCode(String code);

    /**
    * 删除用户code和房间id绑定
    */
    void deleteUserRoom(UserRoom userRoom);

    /**
    * 将聊天室的消息保存起来
    */
    void insertMsg(ChatMsg chatMsg);

    /**
    * 根据房间id和用户ip获取该房间所有聊天记录
    */
    List<ChatMsg> queryMsg(Integer roomId);
    /**
     * 根据房间id获取该房间所有问答记录
     */
    List<ChatMsg> queryAnswer(Integer roomId);
    /**
     * 根据讨论室id查询讨论室信息总数
     * */
    int countByRoomId(Integer roomId);

    /**
     * 根据讨论室内id和用户code查询讨论室信息总数
     * */
    int countByRoomIdAndCode(Integer roomId,String code);

    /**
     * 根据讨论室id查询讨论室的全部信息   获取讨论的开始时间和结束时间
     * */
    public List<ChatMsg> selectAllMsgByRoomId(Integer roomId);

    /**
     * 根据讨论室id和用户code查询讨论室的全部信息  获取个人在该讨论室的全部发言  时间升序
     * */
    public List<ChatMsg> selectByRoomIdAndCode(Integer roomId,String code);

    /**
     * 根据讨论室id查找该聊天室所有用户
     * */
    public List<ChatUser> selectByRoomIdForUsers(Integer roomId);

    /**
     * 插入用户
     * @param chatUser:  chatUser
     * @return: void
     * @Author: Junior
     * @Date: 2023/10/17
     */
    void insertUser(ChatUser chatUser);
    /**
     * 查询用户
     * @param chatUser:  chatUser
     * @return: com.example.junior.entity.ChatUser
     * @Author: Junior
     * @Date: 2023/10/17
     */
    ChatUser queryUser(ChatUser chatUser);

    int deleteUser(ChatUser chatUser);

    /**
     * 查询用户 通过学号
     */
    ChatUser queryUserByCode(String code);

    /**
     * 修改用户密码 通过学号
     */
    int updatePassword(String code,String newPassword);

}
